#pragma once

#ifndef _test_base_etc_h_
#define _test_base_etc_h_

#include <base.config.h>
#include <base.singleton.h>

#include <vector>

struct unit_1
{
	void go()
	{
		std::cout << "aaa" << std::endl;
	}
};

struct unit_2
{
	void go()
	{
		std::cout << "bbb" << std::endl;
	}
};

struct inner
{
	template< typename T >
	void run( T& arg )
	{
		for( size_t i = 0; i < arg.size(); i++ )
		{
			arg[i].go();
		}
	}
};

struct mgr
{
	void test( int t )
	{
		inner in;
		if( t )
			in.run(v1);		
		else
			in.run(v2);

	}

	std::vector<unit_1> v1;
	std::vector<unit_2> v2;

};

struct test_st1 : public PPP_BASE::singleton<test_st1>
{
	void a()
	{
		int cc = 0;
	}


	test_st1()
	{
		int a = 10;

	}

	~test_st1()
	{
		int c = 0;
	}
};


struct test_st2 : public PPP_BASE::singleton<test_st2>
{
	DEF_SINGLETON_REG(test_st2)

	DEF_SINGLETON_DEP_BEGIN
		DEF_SINGLETON_DEP( test_st1)
		DEF_SINGLETON_DEP( test_st3)
		DEF_SINGLETON_DEP( test_st4)
		DEF_SINGLETON_DEP( test_st5)
	DEF_SINGLETON_DEP_END
		
public:
	void a()
	{
		test_st1::instance().a();

		int c=10;
	}


	test_st2()
	{
		int a = 10;

	}

	~test_st2()
	{
		int c = 0;
	}
};

#endif